package my.design.prototype;

import my.design.prototype.util.Topic;
import my.design.prototype.util.TopicRandomUtil;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;

/**
 * @author zp
 * @version 1.0
 * @description: TODO
 * @date 2022/10/5 16:08
 */
public class QuestionBank implements Cloneable {
    private String candidate; // 考⽣生
    private String number; // 考号
    private ArrayList<ChoiceQuestion> choiceQuestionList = new
            ArrayList<ChoiceQuestion>();
    private ArrayList<AnswerQuestion> answerQuestionList = new
            ArrayList<AnswerQuestion>();

    public QuestionBank append(ChoiceQuestion choiceQuestion) {
        choiceQuestionList.add(choiceQuestion);
        return this;
    }

    public QuestionBank append(AnswerQuestion answerQuestion) {
        answerQuestionList.add(answerQuestion);
        return this;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        QuestionBank questionBank = (QuestionBank) super.clone();
        questionBank.choiceQuestionList = (ArrayList<ChoiceQuestion>)
                choiceQuestionList.clone();
        questionBank.answerQuestionList = (ArrayList<AnswerQuestion>)
                answerQuestionList.clone();
// 题⽬目乱序
        Collections.shuffle(questionBank.choiceQuestionList);
        Collections.shuffle(questionBank.answerQuestionList);
// 答案乱序
        ArrayList<ChoiceQuestion> choiceQuestionList =
                questionBank.choiceQuestionList;
        for (ChoiceQuestion question : choiceQuestionList) {
            Topic random = TopicRandomUtil.random(question.getOption(),
                    question.getKey());
            question.setOption(random.getOptionNew());
            question.setKey(random.getKeyNew());
        }
        return questionBank;
    }

    public void setCandidate(String candidate) {
        this.candidate = candidate;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override
    public String toString() {
        StringBuilder detail = new StringBuilder("考⽣生： " + candidate +
                "\r\n" +
                "考号： " + number + "\r\n" +
                "--------------------------------------------\r\n" +
                "⼀一、选择题" + "\r\n\n");
        for (int idx = 0; idx < choiceQuestionList.size(); idx++) {
            detail.append("第").append(idx +
                    1).append("题： ").append(choiceQuestionList.get(idx).getName()).append("\r\n");
            Map<String, String> option =
                    choiceQuestionList.get(idx).getOption();
            for (String key : option.keySet()) {
                detail.append(key).append("： ").append(option.get(key)).append("\r\n");
                ;
            }
            detail.append("答案： ").append(choiceQuestionList.get(idx).getKey()).append("\r\n\n");
        }
        detail.append("⼆二、问答题" + "\r\n\n");
        for (int idx = 0; idx < answerQuestionList.size(); idx++) {
            detail.append("第").append(idx +
                    1).append("题： ").append(answerQuestionList.get(idx).getName()).append("\r\n");
            detail.append("答案： ").append(answerQuestionList.get(idx).getKey()).append("\r\n\n");
        }
        return detail.toString();
    }
}
